package testLambda;

import java.util.function.Supplier;

/**
 * lambda的new 比反射 new 性能好1.5倍 
 * 可以用 lambda的new 替代反射
 * 
 * lambda与直接new 几乎没有差距
 * @author jinmiao
 * 2016年7月10日
 *
 */
public class Lambdea_New_test {
	public static void main(String[] args) {

//		list = list.stream().filter(id->(id<3)).collect(Collectors.toList());
//		list.forEach(id->{System.out.println(id);});
		
//		lambda(list);
//		normal(list);
		
		Class<LambdaBean> cls = LambdaBean.class;
		//性能测试
		for(int i =0;i<30000000;i++)
		{
			lambda(LambdaBean::new);
			reflect(cls);
			normal();
		}
		long start = System.currentTimeMillis();
		for(int i =0;i<30000000;i++)
		{
			lambda(LambdaBean::new);
		}
		System.out.println(System.currentTimeMillis()-start);
		start = System.currentTimeMillis();
		for(int i =0;i<30000000;i++)
		{
			reflect(cls);
		}
		System.out.println(System.currentTimeMillis()-start);
		
		start = System.currentTimeMillis();
		for(int i =0;i<30000000;i++)
		{
			normal();
		}
		System.out.println(System.currentTimeMillis()-start);
		
	}
	
	private static void lambda(Supplier<LambdaBean> sup)
	{
		sup.get();
	}
	
	private static void normal()
	{
		LambdaBean l  = new LambdaBean();
	}
	
	private static void reflect(Class<LambdaBean> cls)
	{
		try {
			cls.newInstance();
		} catch (InstantiationException | IllegalAccessException e) {
			e.printStackTrace();
		}
//		for(Integer id:list)
//		{
//			if(id<3)res.add(id);
//			
//		}
		
		
//		res.forEach(id->{System.out.println(id);});
	}
}
